{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# PPO MARL agent using stable-baselines3\n",
    "\n",
    "In this notebook, we will look at policy optimization using PPO for a multi-agent environment. \n",
    "\n",
    "The code below follows the tutorial [SB3: PPO for Knights-Archers-Zombies](https://pettingzoo.farama.org/tutorials/sb3/kaz/) that comes with the [PettingZoo](https://pettingzoo.farama.org/) library. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Running in Colab/Kaggle\n",
    "\n",
    "If you are running this on Colab, please uncomment below cell and run this to install required dependencies."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "## uncomment and execute this cell to install all the the dependencies if running in Google Colab or Kaggle\n",
    "# !apt-get update \n",
    "# !apt-get install -y swig cmake ffmpeg freeglut3-dev xvfb\n",
    "\n",
    "## Uncomment and execute this cell to install all the the dependencies if running in Google Colab or Kaggle\n",
    "\n",
    "## Uncomment and run for Colab\n",
    "# !git clone https://github.com/nsanghi/drl-2ed\n",
    "# %cd drl-2ed \n",
    "# !pip install  -r requirements.txt\n",
    "# %cd ..\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Uncomment and Rerun the cd command in case you were asked to restart the kernel and you followed that message\n",
    "## as after resart the kernel will again point back to root folder\n",
    "\n",
    "\n",
    "## Uncomment and run for Colab\n",
    "# %cd /content/drl-2ed \n",
    "# %cd chapter6\n",
    "\n",
    "\n",
    "## Uncomment and run for Kaggle\n",
    "# %cd /kaggle/working/drl-2ed \n",
    "# %cd chapter6"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2024-02-24 10:55:02.794429: I tensorflow/core/util/port.cc:111] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n",
      "2024-02-24 10:55:02.796430: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.\n",
      "2024-02-24 10:55:02.828036: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:9342] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n",
      "2024-02-24 10:55:02.828064: E tensorflow/compiler/xla/stream_executor/cuda/cuda_fft.cc:609] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n",
      "2024-02-24 10:55:02.828081: E tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:1518] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n",
      "2024-02-24 10:55:02.833900: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.\n",
      "2024-02-24 10:55:02.834863: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n",
      "To enable the following instructions: AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
      "2024-02-24 10:55:03.496797: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n"
     ]
    }
   ],
   "source": [
    "from __future__ import annotations\n",
    "\n",
    "import glob\n",
    "import os\n",
    "import time\n",
    "\n",
    "import supersuit as ss\n",
    "from stable_baselines3 import PPO\n",
    "from stable_baselines3.ppo import CnnPolicy, MlpPolicy\n",
    "\n",
    "from pettingzoo.butterfly import knights_archers_zombies_v10\n",
    "\n",
    "import random\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from IPython.display import HTML, clear_output, display\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Environment - Knights Archers Zombies\n",
    "\n",
    "Knights Archers Zombies is part of Butterfly environment. Butterfly environments are challenging scenarios created by Farama, using Pygame with visual Atari spaces. All environments require a high degree of coordination and require learning of emergent behaviors to achieve an optimal policy. As such, these environments are currently very challenging to learn. Environments are highly configurable via arguments specified in their respective documentation.\n",
    "\n",
    "By default, PettingZoo models games as Agent Environment Cycle (AEC) environments. This allows PettingZoo to represent any type of game multi-agent RL can consider. In this model, agents sequentially see their observation,\r\n",
    "agents take actions, rewards are emitted from the other agents, and the next agent to act is chosen \r\n",
    "This is effectively a sequentially stepping form of the POSG mode You can read more about it in [PettingZoo: A Standard API for Multi-Agent Reinforcement Learning](https://arxiv.org/pdf/2009.14471.pdf). Specifically refer to Appendix C3 for a detailed mathematical formulation of AEC\n",
    "\n",
    "In Knights Archers Zombies, Zombies walk from the top border of the screen down to the bottom border in unpredictable paths. The agents you control are knights and archers (default 2 knights and 2 archers) that are initially positioned at the bottom border of the screen. Each agent can rotate clockwise or counter-clockwise and move forward or backward. Each agent can also attack to kill zombies. When a knight attacks, it swings a mace in an arc in front of its current heading direction. When an archer attacks, it fires an arrow in a straight line in the direction of the archer’s heading. The game ends when all agents die (collide with a zombie) or a zombie reaches the bottom screen border. A knight is rewarded 1 point when its mace hits and kills a zombie. An archer is rewarded 1 point when one of their arrows hits and kills a zombie. There are two possible observation types for this environment, vectorized and image-based. We will use vectorized space\n",
    "|  |  |\n",
    "|---|---|\n",
    "| Agents | `agents= ['archer_0', 'archer_1', 'knight_0', 'knight_1']` |\n",
    "| Agents | `4` |\n",
    "| Action Shape | `(1,)` |\n",
    "|Action Values |  `[0, 5]` \n",
    "\n",
    "Pass the argument `vector_state=True` to the environment to get a vectorized environment.\r\n",
    "\r\n",
    "The observation is an `(N+1)x5` array for each agent, where `N = num_archers + num_knights + num_swords + max_arrows + max_zombies`. and the `1` refers to the current agent.\r\n",
    "\r\n",
    "In total, there will be N+1 rows. Rows with no entities will be all 0, but the ordering of the entities will not change.\r\n",
    "\r\n",
    "Vector Breakdown\r\n",
    "\r\n",
    "This breaks down what a row in the observation means. All distances are normalized to `[0, 1]`. Note that for positions, `[0, 0]` is the top left corner of the image. Down is positive y, Left is positive x.\r\n",
    "\r\n",
    "For the vector for current agent:\r\n",
    "\r\n",
    "* The first value means nothing and will always be 0.\r\n",
    "* The next four values are the position and angle of the current agent.\r\n",
    "  * The first two values are position values, normalized to the width and height of the image respectively.\r\n",
    "  * The final two values are heading of the agent represented as a unit vector.\r\n",
    "\r\n",
    "For everything else:\r\n",
    "\r\n",
    "* Each row of the matrix (this is an 5 wide vector) has a breakdown that looks something like this:\r\n",
    "  * The first value is the absolute distance between an entity and the current agent.\r\n",
    "  * The next four values are relative position and absolute angles of each entity relative to the current agent.\r\n",
    "    * The first two values are position values relative to the current agent.\r\n",
    "    * The final two values are the angle of the entity represented as a directional unit vlative to the world.\r\n",
    "\r\n",
    "\n",
    ".\r\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "env = knights_archers_zombies_v10.env(render_mode=\"rgb_array\")\n",
    "env.reset(seed=42)\n",
    "\n",
    "for agent in env.agent_iter(10):\n",
    "    observation, reward, termination, truncation, info = env.last()\n",
    "\n",
    "    if termination or truncation:\n",
    "        action = None\n",
    "    else:\n",
    "        # this is where you would insert your policy\n",
    "        action = env.action_space(agent).sample()\n",
    "\n",
    "    env.step(action)\n",
    "    plt.imshow(env.render())\n",
    "    display(plt.gcf())\n",
    "    clear_output(wait=True)\n",
    "\n",
    "env.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(env_fn, steps: int = 10_000, seed: int | None = 0, **env_kwargs):\n",
    "    # Train a single model to play as each agent in an AEC environment\n",
    "    env = env_fn.parallel_env(**env_kwargs)\n",
    "\n",
    "    # Add black death wrapper so the number of agents stays constant\n",
    "    # MarkovVectorEnv does not support environments with varying numbers of active agents unless black_death is set to True\n",
    "    env = ss.black_death_v3(env)\n",
    "\n",
    "    # Pre-process using SuperSuit\n",
    "    visual_observation = not env.unwrapped.vector_state\n",
    "    if visual_observation:\n",
    "        # If the observation space is visual, reduce the color channels, resize from 512px to 84px, and apply frame stacking\n",
    "        env = ss.color_reduction_v0(env, mode=\"B\")\n",
    "        env = ss.resize_v1(env, x_size=84, y_size=84)\n",
    "        env = ss.frame_stack_v1(env, 3)\n",
    "\n",
    "    env.reset(seed=seed)\n",
    "\n",
    "    print(f\"Starting training on {str(env.metadata['name'])}.\")\n",
    "\n",
    "    env = ss.pettingzoo_env_to_vec_env_v1(env)\n",
    "    env = ss.concat_vec_envs_v1(env, 8, num_cpus=1, base_class=\"stable_baselines3\")\n",
    "\n",
    "    # Use a CNN policy if the observation space is visual\n",
    "    model = PPO(\n",
    "        CnnPolicy if visual_observation else MlpPolicy,\n",
    "        env,\n",
    "        verbose=3,\n",
    "        batch_size=256,\n",
    "    )\n",
    "\n",
    "    model.learn(total_timesteps=steps)\n",
    "\n",
    "    model.save(f\"{env.unwrapped.metadata.get('name')}_{time.strftime('%Y%m%d-%H%M%S')}\")\n",
    "\n",
    "    print(\"Model has been saved.\")\n",
    "\n",
    "    print(f\"Finished training on {str(env.unwrapped.metadata['name'])}.\")\n",
    "\n",
    "    env.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluate Function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def eval(env_fn, num_games: int = 100, render_mode: str | None = None, **env_kwargs):\n",
    "    # Evaluate a trained agent vs a random agent\n",
    "    env = env_fn.env(render_mode=render_mode, **env_kwargs)\n",
    "\n",
    "    # Pre-process using SuperSuit\n",
    "    visual_observation = not env.unwrapped.vector_state\n",
    "    if visual_observation:\n",
    "        # If the observation space is visual, reduce the color channels, resize from 512px to 84px, and apply frame stacking\n",
    "        env = ss.color_reduction_v0(env, mode=\"B\")\n",
    "        env = ss.resize_v1(env, x_size=84, y_size=84)\n",
    "        env = ss.frame_stack_v1(env, 3)\n",
    "\n",
    "    print(\n",
    "        f\"\\nStarting evaluation on {str(env.metadata['name'])} (num_games={num_games}, render_mode={render_mode})\"\n",
    "    )\n",
    "\n",
    "    try:\n",
    "        latest_policy = max(\n",
    "            glob.glob(f\"{env.metadata['name']}*.zip\"), key=os.path.getctime\n",
    "        )\n",
    "    except ValueError:\n",
    "        print(\"Policy not found.\")\n",
    "        exit(0)\n",
    "\n",
    "    model = PPO.load(latest_policy)\n",
    "\n",
    "    rewards = {agent: 0 for agent in env.possible_agents}\n",
    "\n",
    "    # Note: we evaluate here using an AEC environments, to allow for easy A/B testing against random policies\n",
    "    # For example, we can see here that using a random agent for archer_0 results in less points than the trained agent\n",
    "    for i in range(num_games):\n",
    "        env.reset(seed=i)\n",
    "        env.action_space(env.possible_agents[0]).seed(i)\n",
    "\n",
    "        for agent in env.agent_iter():\n",
    "            obs, reward, termination, truncation, info = env.last()\n",
    "\n",
    "            for a in env.agents:\n",
    "                rewards[a] += env.rewards[a]\n",
    "\n",
    "            if termination or truncation:\n",
    "                break\n",
    "            else:\n",
    "                if agent == env.possible_agents[0]:\n",
    "                    act = env.action_space(agent).sample()\n",
    "                else:\n",
    "                    act = model.predict(obs, deterministic=True)[0]\n",
    "            env.step(act)\n",
    "    env.close()\n",
    "\n",
    "    avg_reward = sum(rewards.values()) / len(rewards.values())\n",
    "    avg_reward_per_agent = {\n",
    "        agent: rewards[agent] / num_games for agent in env.possible_agents\n",
    "    }\n",
    "    print(f\"Avg reward: {avg_reward}\")\n",
    "    print(\"Avg reward per agent, per game: \", avg_reward_per_agent)\n",
    "    print(\"Full rewards: \", rewards)\n",
    "    return avg_reward"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train and Evaluate the Agent"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Starting training on knights_archers_zombies_v10.\n",
      "Using cpu device\n",
      "------------------------------\n",
      "| time/              |       |\n",
      "|    fps             | 1062  |\n",
      "|    iterations      | 1     |\n",
      "|    time_elapsed    | 61    |\n",
      "|    total_timesteps | 65536 |\n",
      "------------------------------\n",
      "----------------------------------------\n",
      "| time/                   |            |\n",
      "|    fps                  | 925        |\n",
      "|    iterations           | 2          |\n",
      "|    time_elapsed         | 141        |\n",
      "|    total_timesteps      | 131072     |\n",
      "| train/                  |            |\n",
      "|    approx_kl            | 0.00739076 |\n",
      "|    clip_fraction        | 0.053      |\n",
      "|    clip_range           | 0.2        |\n",
      "|    entropy_loss         | -1.79      |\n",
      "|    explained_variance   | 0.0429     |\n",
      "|    learning_rate        | 0.0003     |\n",
      "|    loss                 | 0.00427    |\n",
      "|    n_updates            | 10         |\n",
      "|    policy_gradient_loss | -0.00401   |\n",
      "|    value_loss           | 0.0279     |\n",
      "----------------------------------------\n",
      "Model has been saved.\n",
      "Finished training on knights_archers_zombies_v10.\n",
      "\n",
      "Starting evaluation on knights_archers_zombies_v10 (num_games=10, render_mode=None)\n",
      "Avg reward: 0.75\n",
      "Avg reward per agent, per game:  {'archer_0': 0.3, 'archer_1': 0.0, 'knight_0': 0.0, 'knight_1': 0.0}\n",
      "Full rewards:  {'archer_0': 3, 'archer_1': 0, 'knight_0': 0, 'knight_1': 0}\n",
      "\n",
      "Starting evaluation on knights_archers_zombies_v10 (num_games=2, render_mode=human)\n",
      "Avg reward: 0.25\n",
      "Avg reward per agent, per game:  {'archer_0': 0.5, 'archer_1': 0.0, 'knight_0': 0.0, 'knight_1': 0.0}\n",
      "Full rewards:  {'archer_0': 1, 'archer_1': 0, 'knight_0': 0, 'knight_1': 0}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.25"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "env_fn = knights_archers_zombies_v10\n",
    "\n",
    "# Set vector_state to false in order to use visual observations (significantly longer training time)\n",
    "env_kwargs = dict(max_cycles=100, max_zombies=4, vector_state=True)\n",
    "\n",
    "# Train a model (takes ~5 minutes on a laptop CPU)\n",
    "train(env_fn, steps=81_920, seed=0, **env_kwargs)\n",
    "\n",
    "# Evaluate 10 games (takes ~10 seconds on a laptop CPU)\n",
    "eval(env_fn, num_games=10, render_mode=None, **env_kwargs)\n",
    "\n",
    "# Watch 2 games (takes ~10 seconds on a laptop CPU)\n",
    "# Will not work on Google Colab\n",
    "eval(env_fn, num_games=2, render_mode=\"human\", **env_kwargs)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
